from PyQt5.QtWidgets import QMainWindow, QTextEdit, QVBoxLayout, QWidget
from PyQt5.QtCore import QThread, pyqtSignal

class DataInteractionThread(QThread):
    """
    数据交互线程
    """
    new_message = pyqtSignal(str)  # 用于发送新消息的信号

    def __init__(self, server):
        super().__init__()
        self.server = server

    def run(self):
        """
        线程运行逻辑
        """
        self.server.start()

class MainWindow(QMainWindow):
    def __init__(self, server):
        super().__init__()
        self.server = server
        self.init_ui()

    def init_ui(self):
        """
        初始化界面
        """
        self.setWindowTitle("ETC.D4510 - Data Interaction")
        self.setGeometry(100, 100, 800, 600)

        # 创建日志显示区域
        self.log_text = QTextEdit(self)
        self.log_text.setReadOnly(True)  # 设置为只读
        self.log_text.setLineWrapMode(QTextEdit.NoWrap)  # 禁止自动换行

        # 设置布局
        layout = QVBoxLayout()
        layout.addWidget(self.log_text)

        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

        # 连接 Server 的 new_message 信号到 update_log 槽函数
        self.server.new_message.connect(self.update_log)

        # 启动数据交互线程
        self.data_thread = DataInteractionThread(self.server)
        self.data_thread.new_message.connect(self.update_log)
        self.data_thread.start()

    def update_log(self, message):
        """
        更新日志显示
        :param message: 新消息
        """
        self.log_text.append(message)  # 添加新消息
        self.log_text.ensureCursorVisible()  # 确保光标可见，自动滚动到最新信息